Los principales objetivos de este ejercicio fueron inicializar el directorio y tablas de p\'aginas
para el Kernel haciendo \emph{identity mapping} de los primeros 2MB de memoria, activar paginaci\'on
y mostrar el nombre del grupo en pantalla.

\subsubsection{Directorio y Tablas de P\'agina}
El archivo {\bf paging.asm} contiene el c\'odigo para inicializar directorio y tablas de p\'aginas
haciendo \emph{identity mapping}.
\\
\hspace*{10pt}
Lo primero que hacemos es completar las 1024 entradas del Page Directory a partir de la direcci\'on
\texttt{0x21000} (base del Page Directory) con el valor \texttt{0x00000002} (permite poder escribir y leer las p\'aginas). 
Luego asignamos el valor \texttt{0x22003} (supervisor, read/write, present) a la primer entrada, porque para hacer
\emph{identity mapping}
de los primeros 2MB los 10 bits m\'as significativos de un n\'umero entre 0 y 2MB (0x00200000) son 0x0. Estos 10 bits m\'as
significativos nos marcan el \'indice en la Page Directory cuando paginaci\'on este activada. Con esto ya tenemos inicializado
el directorio.
\\
\hspace*{10pt}
A la hora de inicializar la Page Table, procedemos a completar 512 entradas (solo queremos 2MB de
\emph{identity mapping}) a partir de la direcci\'on \texttt{0x22000}. Las 512 entradas surge de 2MB donde los 10 bits m\'as
significativos 
despu\'es de los usados como \'indices de la Page Directory nos indican el \'indice en la Page Table. Entonces 2MB = 0x00200000 =
0000 0000  00 $|$ 11  0000 0000 $|$ 0000 0000 0000 en bits, quedando como \'indice de la Page Table (los 10 bits del medio)
0x200 = 512 en decimal. Por lo tanto necesitamos 512 \'indices de entradas v\'alidas en el Page Table para poder hacer el
\emph{identity mapping} de los primeros 2MB.
Para cada entrada $i$ ($0 \geq i \geq 511$) calculamos el valor \texttt{0x1000$*i$} (direcci\'on a la cual apuntar haciendo
\emph{identity mapping} dado que cada p\'agina ocupa 4Kb = 0x1000) y le sumamos el valor \texttt{0x00000003} (para setear los
atributos de supervisor, read/write, presente).
Una vez completado este proceso para las 512 entradas contamos con la Tabla de P\'aginas inicializada
haciendo \emph{identity mapping} de los primeros 2MB de memoria.

\subsubsection{Activar Paginaci\'on}
Desde el Kernel llamamos a \texttt{page\_init} para inicializar el Directorio y la Tabla de P\'aginas.
Luego cargamos la direcci\'on f\'isica del Directorio de P\'aginas (\texttt{0x21000}) en el registro {\bf cr3} (Limpiando de esta
manera los bits PCD y PWT) y activamos
el bit de paginaci\'on (PG) en el registro {\bf cr0} haciendo \texttt{mov eax, cr0} $\rightarrow$
\texttt{or eax, 0x80000000} $\rightarrow$ \texttt{mov cr0, eax}. De esta forma, ya tenemos activada
paginaci\'on en el sistema.

\subsubsection{Nombre del grupo}
En el mismo Kernel, alcanza con realizar una llamada a \texttt{IMPRIMIR\_TEXTO} pasandole un puntero
a la memoria guardando el nombre del grupo y su longitud e indicando imprimirlo en la primer fila.
De esta forma la pantalla mostrar\'a el nombre del grupo, como podemos ver en la imagen presentada
a continuaci\'on. C\'omo a partir de esta rutina estamos usando paginaci\'on, si imprime el mensaje en el lugar deseado significa
que se ha cambiado correctamente el mapa de memoria (ya que la macro usa la direcci\'on 0xB8000). A partir de este momento
comentamos el c\'odigo que forzaba el error de divisi\'on por cero para poder continuar con el desarrollo del sistemacorrectamente.

\begin{figure}[H]
	\centering
	\includegraphics[scale=0.5]{Images/ej3.png}
	\centering
	\label{fig_ej3}
\end{figure}

